<!--
  ~ Licensed to Apache Software Foundation (ASF) under one or more contributor
  ~ license agreements. See the NOTICE file distributed with
  ~ this work for additional information regarding copyright
  ~ ownership. Apache Software Foundation (ASF) licenses this file to you under
  ~ the Apache License, Version 2.0 (the "License"); you may
  ~ not use this file except in compliance with the License.
  ~ You may obtain a copy of the License at
  ~
  ~     http://www.apache.org/licenses/LICENSE-2.0
  ~
  ~ Unless required by applicable law or agreed to in writing,
  ~ software distributed under the License is distributed on an
  ~ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
  ~ KIND, either express or implied.  See the License for the
  ~ specific language governing permissions and limitations
  ~ under the License.
-->

<script setup>
  import { reactive, ref } from 'vue';
  const showDialog = ref(false);
  const title = ref('');
  const valueData = reactive({
    data: '',
    formattedData: '',
  });

  const numSpaces = 2;
  const closeDialog = () => {
    showDialog.value = false;
  };

  const downloadValue = () => {
    const dataBlob = new Blob([valueData.formattedData], { type: 'text/JSON' });
    var a = document.createElement('a');
    a.download = 'value.txt';
    a.href = URL.createObjectURL(dataBlob);
    document.body.appendChild(a);
    a.click();
    document.body.removeChild(a);
  };

  const openDialog = (data) => {
    title.value = 'Value of key ' + data.key;
    showDialog.value = true;
    valueData.data = data.value;
    valueData.formattedData = JSON.stringify(JSON.parse(valueData.data), null, numSpaces);
  };
  defineExpose({
    openDialog,
  });
</script>

<template>
  <el-dialog v-model="showDialog" :title="title">
    <div class="configuration">{{ valueData.formattedData }}</div>
    <template #footer>
      <span class="dialog-footer footer">
        <el-button @click="closeDialog">Cancel</el-button>
        <el-button type="primary" @click.prevent="downloadValue()"> Download </el-button>
      </span>
    </template>
  </el-dialog>
</template>

<style lang="scss" scoped>
  .footer {
    width: 100%;
    display: flex;
    justify-content: center;
  }
  .configuration {
    width: 100%;
    overflow: auto;
    max-height: 700px;
    white-space: pre;
  }
</style>
